<?php

class AuthController extends Zend_Controller_Action
{
     public function init()
    {
        $this->_helper->layout->setLayout('other');
    }
    
    public function indexAction(){
        $this->_helper->redirector('login');
    }
    
    public function loginAction() {
        $modAuth = new Application_Model_Auth();
        //получаем кол-во ошибок авторизация текущего юзера
        $error = $modAuth->checkError();
        
        //получаем время блокировки пользователя
        $timeBlocked = $modAuth->getTimeBlockedIp();
        $timeBlocked = @$timeBlocked[0]['time'];
        //добавляем к времени блокировки 30 минут
        $timeBlocked = (intval($timeBlocked) + 30);
        //если текущее время превысило время блокировки на 30 минут
        //даем доступ к авторизации
        if ($timeBlocked <= time()){
           $modAuth->deleteBlockedIp();
        }    
        
        if($error >= 5){
            //если ошибок больше или равно 5 - редирект на главную
            $this->_helper->redirector('index', 'index');
        }
        //проверяем авторизирован ли пользователь
        if (Zend_Auth::getInstance()->hasIdentity()) {
            //если да - редирект на главную
            $this->_helper->redirector('index', 'index');
        }
        //выводим форму   
        $form = new Application_Form_Auth();
        $this->view->form = $form;
        
        //если пришел POST запрос
        if ($this->getRequest()->isPost()) {
            //принимаем его
            $formData = $this->getRequest()->getPost();
            
            //если форма заполнена верно
            if ($form->isValid($formData)) {
                //получаем адаптер подключени к БД
                $authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
            
                //указываем таблицу и поля в каких следует искать
                //данные о пользователе
                $authAdapter->setTableName('users')
                    ->setIdentityColumn('email')
                    ->setCredentialColumn('password');
                
                //получаем введенные данные
                $username = $this->getRequest()->getPost('email');
                $password = md5($this->getRequest()->getPost('password'));
                
                $authAdapter->setIdentity($username)
                    ->setCredential($password);
                
                //получаем экземпляр класса Zend_Auth
                $auth = Zend_Auth::getInstance();
                //пытаемся авторизировать пользователя
                $result = $auth->authenticate($authAdapter);
                
               //если авторизация прошла успешно
               if ($result->isValid()) {       
                   $identity = $authAdapter->getResultRowObject();
                   $role = new Application_Model_Auth();
                            
                   //получаем "Role" юзера
                   $getRoleByIdUser = $role->GetRoleByIdUser($identity->id);
                  
                   //добавляем "Role"
                   $identity->role = $getRoleByIdUser[0]['role'];
                   // получаем доступ к хранилищу данных Zend
                   $authStorage = $auth->getStorage();
                   // помещаем туда информацию о пользователе,
                   // чтобы иметь к ним доступ при конфигурировании Acl
                   $authStorage->write($identity);
                   //получаем id & кол-во посещений 
                   //авторизированного юзера
                   $id = Zend_Auth::getInstance()->getIdentity()->id;
                   $current = Zend_Auth::getInstance()->getIdentity()->visits;
                   //обновляем счетчик посещений на +1
                   $role->visitsCount($id, $current);
    
                   $this->_helper->redirector('index', 'profile'); 
               } else {
                   $this->view->errMessage = 'Неверное имя пользователя или пароль';
                   //если была ошибка авторизации
                   $role = new Application_Model_Auth();
                   //получаем введенные данные
                   $login = $this->_getParam('email');
                   $pass = $this->_getParam('password');
                   //и записываем их в бд
                   $role->addError($login, $pass);                         
               }
            }
        }
    }
    
    public function logoutAction() {
        Zend_Auth::getInstance()->clearIdentity();
        $this->_helper->redirector('index', 'index');
    }
}